#include <Generic.h>
#include <sys/time.h>
#include <stdarg.h>

namespace Generic
{
	void
	debugf( const char* format, ... )
	{
#ifdef DEBUG
		printf( "DEBUG: " );
		va_list args;
		va_start( args, format );
		vprintf( format, args );
		va_end( args );
#endif
		;
	}

  void 
  debugf( std::ofstream& rFile, const char* format, ... )
  {
		char buffer[ 1024 ];
    va_list args;
		va_start( args, format );
		vsprintf( buffer, format, args );
		va_end( args );
    rFile << buffer;
  }

  int
  SubstractTime (struct ::timeval *result, struct ::timeval *x, struct ::timeval *y)
  {
    /* Perform the carry for the later subtraction by updating y. */
    if (x->tv_usec < y->tv_usec) {
      int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
      y->tv_usec -= 1000000 * nsec;
      y->tv_sec += nsec;
    }
    if (x->tv_usec - y->tv_usec > 1000000) {
      int nsec = (x->tv_usec - y->tv_usec) / 1000000;
      y->tv_usec += 1000000 * nsec;
      y->tv_sec -= nsec;
    }

    /* Compute the time remaining to wait.
       tv_usec is certainly positive. */
    result->tv_sec = x->tv_sec - y->tv_sec;
    result->tv_usec = x->tv_usec - y->tv_usec;

    /* Return 1 if result is negative. */
    return x->tv_sec < y->tv_sec;
  }

}

